home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 066 (1988-08-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 066 (1988-08-15)(Ossowski, Stefan)(DE)(PD).adf / Ani_Pointers / Pointerz.c < prev    next >
C/C++ Source or Header  |  1988-06-02  |  12KB  |  671 lines

  1. /****************************************/ 
  2. /*    Pointerz            */
  3. /*      - a little demo that uses     */
  4. /*    SetPointer() to create four     */
  5. /*    animated pointers.              */
  6. /*                    */
  7. /*    Blake Freymann    4/2/87        */
  8. /*    CIS 73657,67            */
  9. /*                    */
  10. /****************************************/
  11.  
  12.  
  13.  
  14. #include <intuall.h>
  15.  
  16. #define NUMWINS 4
  17.  
  18. struct IntuitionBase *IntuitionBase;
  19. struct IntuiMessage *GetMsg();
  20. struct IntuiMessage *message;
  21. struct Window *OpenWindow();
  22. struct InputEvent *Intuition();
  23. struct Window *MyWindow[NUMWINS];
  24.  
  25. short i, mm, win;
  26. ULONG Signals; /* for Wait() */
  27. void findwindow();
  28.  
  29. /*******************************************************************/
  30. /* Image Data (sprites)                           */
  31. /*******************************************************************/
  32.  
  33. /* bird1.c */
  34.  
  35. UWORD Bird1Data[] =
  36. {
  37. 0x0000,0x0000,
  38.  
  39. 0x0000,0x0000,
  40. 0x0000,0x0000,
  41. 0x0000,0x0000,
  42. 0x0000,0x0000,
  43. 0x0000,0x0000,
  44. 0x0000,0x0000,
  45. 0x0000,0x0000,
  46. 0x0000,0x0000,
  47. 0x07F0,0x0000,
  48. 0x0FF8,0x3000,
  49. 0x2FFC,0x57E0,
  50. 0x0FFE,0xF7F0,
  51. 0x07FA,0x83F0,
  52. 0x03FA,0x27F8,
  53. 0x01F8,0x19F8,
  54. 0x01F8,0x29F8,
  55. 0x01F8,0x01F8,
  56. 0x01F8,0x01F8,
  57. 0x0150,0x0150,
  58. 0x02A0,0x02A0,
  59. 0x0000,0x0000,
  60.  
  61. 0x0000,0x0000
  62. };
  63.  
  64. /* bird2.c */
  65.  
  66. UWORD Bird2Data[] =
  67. {
  68. 0x0000,0x0000,
  69.  
  70. 0x0000,0x0000,
  71. 0x0000,0x0000,
  72. 0x0000,0x0000,
  73. 0x0000,0x0000,
  74. 0x0000,0x0000,
  75. 0x0000,0x0000,
  76. 0x0000,0x0000,
  77. 0x0000,0x0000,
  78. 0x07F0,0x0000,
  79. 0x0FF8,0x37F0,
  80. 0x2FFC,0x57F8,
  81. 0x0FFE,0xF7F8,
  82. 0x07FE,0x83FC,
  83. 0x01FE,0x25FE,
  84. 0x00FF,0x18FF,
  85. 0x0000,0x2800,
  86. 0x0000,0x0000,
  87. 0x0000,0x0000,
  88. 0x0000,0x0000,
  89. 0x0000,0x0000,
  90. 0x0000,0x0000,
  91.  
  92. 0x0000,0x0000
  93. };
  94.  
  95.  
  96. /* bird3.c */
  97.  
  98. UWORD Bird3Data[] =
  99. {
  100. 0x0000,0x0000,
  101.  
  102. 0x0000,0x0000,
  103. 0x0000,0x0000,
  104. 0x0000,0x0000,
  105. 0x0000,0x0000,
  106. 0x0000,0x0000,
  107. 0x0000,0x0000,
  108. 0x001F,0x001F,
  109. 0x00FE,0x00FE,
  110. 0x07FE,0x03FE,
  111. 0x0FFC,0x37FC,
  112. 0x2FFC,0x57FC,
  113. 0x0FFE,0xF3F8,
  114. 0x07FA,0x8000,
  115. 0x0002,0x2400,
  116. 0x0000,0x1800,
  117. 0x0000,0x2800,
  118. 0x0000,0x0000,
  119. 0x0000,0x0000,
  120. 0x0000,0x0000,
  121. 0x0000,0x0000,
  122. 0x0000,0x0000,
  123.  
  124. 0x0000,0x0000
  125. };
  126.  
  127.  
  128. UWORD Bird4Data[] =
  129. {
  130. 0x0000,0x0000,
  131.  
  132. 0x03E0,0x03E0,
  133. 0x03F0,0x03F0,
  134. 0x01F8,0x01F8,
  135. 0x01F8,0x01F8,
  136. 0x01F8,0x01F8,
  137. 0x01F8,0x01F8,
  138. 0x01F8,0x01F8,
  139. 0x01F8,0x01F8,
  140. 0x07F0,0x03F0,
  141. 0x0FF0,0x33F0,
  142. 0x2FFE,0x50E0,
  143. 0x0FFC,0xF000,
  144. 0x07F0,0x8000,
  145. 0x0000,0x2400,
  146. 0x0000,0x1800,
  147. 0x0000,0x2800,
  148. 0x0000,0x0000,
  149. 0x0000,0x0000,
  150. 0x0000,0x0000,
  151. 0x0000,0x0000,
  152. 0x0000,0x0000,
  153.  
  154. 0x0000,0x0000
  155. };
  156.  
  157.  
  158. USHORT Face1Data[] =
  159. {
  160.  
  161. 0x0000,0x0000,
  162.  
  163. 0x07C0,0x0000,
  164. 0x0FE0,0x0000,
  165. 0x1FF0,0x0000,
  166. 0x2388,0x1C70,
  167. 0x4104,0x3EF8,
  168. 0x0000,0x638C,
  169. 0x2288,0x638C,
  170. 0x8002,0x638C,
  171. 0xC106,0x3EF8,
  172. 0xE38E,0x1C70,
  173. 0xFFFE,0x0000,
  174. 0xF93E,0x0000,
  175. 0xF93E,0x0000,
  176. 0xFFFE,0x7838,
  177. 0x7FFC,0x3FF8,
  178. 0x77DC,0x1FF0,
  179. 0x783C,0x1FF0,
  180. 0x3FF8,0x0FE0,
  181. 0x1FF0,0x0380,
  182. 0x0FE0,0x0000,
  183. 0x07C0,0x0000,
  184.  
  185. 0x0000,0x0000
  186.  
  187. };
  188.  
  189.  
  190. USHORT Face2Data[] =
  191. {
  192. 0x0000,0x0000,
  193.  
  194. 0x07C0,0x0000,
  195. 0x0FE0,0x0000,
  196. 0x1FF0,0x0000,
  197. 0x2388,0x1C70,
  198. 0x4104,0x3EF8,
  199. 0x1860,0x7BEC,
  200. 0x3AE8,0x7BEC,
  201. 0x8002,0x638C,
  202. 0xC106,0x3EF8,
  203. 0xE38E,0x1C70,
  204. 0xFFFE,0x0000,
  205. 0xF93E,0x0000,
  206. 0xF93E,0x0000,
  207. 0xFFFE,0x0000,
  208. 0x7FFC,0x0FE0,
  209. 0x7FFC,0x1FF0,
  210. 0x783C,0x1FF0,
  211. 0x3FF8,0x0FE0,
  212. 0x1FF0,0x0380,
  213. 0x0FE0,0x0000,
  214. 0x0700,0x0000,
  215.  
  216. 0x0000,0x0000
  217. };
  218.  
  219.  
  220. USHORT Face3Data[] =
  221. {
  222. 0x0000,0x0000,
  223.  
  224. 0x07C0,0x0000,
  225. 0x0FE0,0x0000,
  226. 0x1FF0,0x0000,
  227. 0x2388,0x1C70,
  228. 0x4104,0x3EF8,
  229. 0x0C30,0x6FBC,
  230. 0x1E78,0x5F7C,
  231. 0x8002,0x638C,
  232. 0xC106,0x3EF8,
  233. 0xE38E,0x1C70,
  234. 0xFFFE,0x0000,
  235. 0xF93E,0x0000,
  236. 0xF93E,0x0000,
  237. 0xFFFE,0x0000,
  238. 0x7FFC,0x0FE0,
  239. 0x7FFC,0x1C70,
  240. 0x783C,0x3FF8,
  241. 0x3FF8,0x3FF8,
  242. 0x1FF0,0x0380,
  243. 0x0FE0,0x0000,
  244. 0x07C0,0x0000,
  245.  
  246. 0x0000,0x0000
  247.  
  248. };
  249.  
  250. USHORT Face4Data[] =
  251. {
  252.  
  253. 0x0000,0x0000,
  254.  
  255. 0x07C0,0x0000,
  256. 0x0FE0,0x0000,
  257. 0x1FF0,0x0000,
  258. 0x2388,0x1C70,
  259. 0x4104,0x3EF8,
  260. 0x0410,0x679C,
  261. 0x0E38,0x4F3C,
  262. 0x8C32,0x6FBC,
  263. 0xC106,0x3EF8,
  264. 0xE38E,0x1C70,
  265. 0xFFFE,0x0000,
  266. 0xF93E,0x0000,
  267. 0xF11E,0x0280,
  268. 0xFFFE,0x0000,
  269. 0x7FFC,0x0FE0,
  270. 0x7FFC,0x1FF0,
  271. 0x7FFC,0x1830,
  272. 0x3838,0x1FF0,
  273. 0x1FF0,0x0FE0,
  274. 0x0FE0,0x0000,
  275. 0x07C0,0x0000,
  276.  
  277. 0x0000,0x0000
  278.  
  279. };
  280.  
  281.  
  282. USHORT Fish1Data[] =
  283. {
  284. 0x0000,0x0000,
  285.  
  286. 0x0000,0x0000,
  287. 0x0000,0x0000,
  288. 0xF800,0xF800,
  289. 0xF700,0xCF00,
  290. 0xE780,0xDF80,
  291. 0xC7C0,0xFFC0,
  292. 0xFFE0,0xFFE0,
  293. 0xFFF0,0xFFF0,
  294. 0x7FF0,0x0070,
  295. 0x7FF0,0x7FF0,
  296. 0x3FF0,0x01F0,
  297. 0x3FF0,0x3FF0,
  298. 0x1FE0,0x03E0,
  299. 0x0FC0,0x0FC0,
  300. 0x07FF,0x07FF,
  301. 0x007F,0x0003,
  302. 0x007E,0x007E,
  303. 0x007C,0x000C,
  304. 0x0078,0x0078,
  305. 0x0070,0x0030,
  306. 0x0060,0x0060,
  307.  
  308. 0x0000,0x0000
  309. };
  310.  
  311. USHORT Fish2Data[] =
  312. {
  313. 0x0000,0x0000,
  314.  
  315. 0xF800,0xF800,
  316. 0xFF00,0xFF00,
  317. 0xF780,0xCF80,
  318. 0xE7C0,0xDFC0,
  319. 0xC7E0,0xFFE0,
  320. 0xFFF0,0xFFF0,
  321. 0x7FF0,0x0070,
  322. 0x7FF0,0x7FF0,
  323. 0x3FF0,0x01F0,
  324. 0x3FFF,0x3FFF,
  325. 0x1FFF,0x0383,
  326. 0x0FFE,0x0FFE,
  327. 0x07FC,0x078C,
  328. 0x0078,0x0078,
  329. 0x0070,0x0030,
  330. 0x0060,0x0060,
  331. 0x0040,0x0040,
  332. 0x0000,0x0000,
  333. 0x0000,0x0000,
  334. 0x0000,0x0000,
  335. 0x0000,0x0000,
  336.  
  337. 0x0000,0x0000
  338. };
  339.  
  340. USHORT Fish3Data[] =
  341. {
  342. 0x0000,0x0000,
  343.  
  344. 0x0000,0x0000,
  345. 0x0000,0x0000,
  346. 0x1F00,0x1F00,
  347. 0x7F80,0x7F80,
  348. 0xF7C0,0xEFC0,
  349. 0xE7C0,0xDFC0,
  350. 0xE7E0,0xDFE0,
  351. 0xDFF0,0xF870,
  352. 0xFFF0,0xE7F0,
  353. 0xFFF0,0x99F0,
  354. 0x7FF0,0x67F0,
  355. 0x3FF8,0x1BB8,
  356. 0x3FFE,0x27C6,
  357. 0x0FFF,0x0FBB,
  358. 0x007F,0x004F,
  359. 0x007C,0x003C,
  360. 0x0070,0x0070,
  361. 0x0060,0x0060,
  362. 0x0000,0x0000,
  363. 0x0000,0x0000,
  364. 0x0000,0x0000,
  365.  
  366. 0x0000,0x0000
  367.  
  368. };
  369.  
  370. USHORT Fish4Data[] =
  371. {
  372. 0x0000,0x0000,
  373.  
  374. 0x0000,0x0000,
  375. 0x001F,0x001F,
  376. 0x00EF,0x00F3,
  377. 0x01E7,0x01FB,
  378. 0x03E3,0x03FF,
  379. 0x07FF,0x07FF,
  380. 0x0FFF,0x0FFF,
  381. 0x0FFE,0x0E00,
  382. 0x0FFE,0x0FFE,
  383. 0x0FFC,0x0F80,
  384. 0x0FFC,0x0FFC,
  385. 0x07F8,0x07C0,
  386. 0x03F0,0x03F0,
  387. 0xFFE0,0xFFE0,
  388. 0xFE00,0xC000,
  389. 0x7E00,0x7E00,
  390. 0x3E00,0x3000,
  391. 0x1E00,0x1E00,
  392. 0x0E00,0x0C00,
  393. 0x0600,0x0600,
  394. 0x0000,0x0000,
  395.  
  396. 0x0000,0x0000
  397.  
  398. };
  399.  
  400.  
  401. USHORT Dodo1Data[] =
  402. {
  403. 0x0000,0x0000,
  404.  
  405. 0x1FE0,0x1C00,
  406. 0x7E60,0x7F80,
  407. 0xFE70,0xFF80,
  408. 0xFFF0,0xFE00,
  409. 0x7FE0,0x7E00,
  410. 0x1FC0,0x1800,
  411. 0x1FF0,0x0000,
  412. 0x3FF8,0x0000,
  413. 0x3DF8,0x0200,
  414. 0x7CFC,0x0300,
  415. 0x79FC,0x0600,
  416. 0x73FC,0x0C00,
  417. 0x73FC,0x0C00,
  418. 0x7804,0x07F8,
  419. 0x3FF8,0x0000,
  420. 0x3FF8,0x0600,
  421. 0x1FF0,0x0C00,
  422. 0x1FE0,0x1800,
  423. 0xF83C,0xF83C,
  424. 0xA83A,0xA83A,
  425. 0x2C29,0x2C29,
  426.  
  427. 0x0000,0x0000
  428.  
  429. };
  430.  
  431. USHORT Dodo2Data[] =
  432. {
  433. 0x0000,0x0000,
  434.  
  435. 0x0FF0,0x0C00,
  436. 0x1F30,0x1FC0,
  437. 0x7F38,0x7FC0,
  438. 0x7FF8,0x7F00,
  439. 0x3FF0,0x3F00,
  440. 0x0FE0,0x0C00,
  441. 0x07F0,0x0000,
  442. 0x3FF8,0x0000,
  443. 0x3DF8,0x0200,
  444. 0x7CFC,0x0300,
  445. 0x79FC,0x0600,
  446. 0x73FC,0x0C00,
  447. 0x73FC,0x0C00,
  448. 0x7804,0x07F8,
  449. 0x3FF8,0x0000,
  450. 0x3FF8,0x0200,
  451. 0x1FF0,0x0600,
  452. 0x1FF0,0x0C10,
  453. 0x1F7C,0x1F7C,
  454. 0x1554,0x1554,
  455. 0x1554,0x1554,
  456.  
  457. 0x0000,0x0000
  458.  
  459. };
  460.  
  461. USHORT Dodo3Data[] =
  462. {
  463. 0x0000,0x0000,
  464.  
  465. 0x03FC,0x0300,
  466. 0x07CE,0x07F0,
  467. 0x1FCE,0x1FF0,
  468. 0x1FFE,0x1FC0,
  469. 0x0FFC,0x0F80,
  470. 0x03F8,0x0300,
  471. 0x07F0,0x0000,
  472. 0x3FF8,0x0000,
  473. 0x3DF8,0x0200,
  474. 0x7CFC,0x0300,
  475. 0x79FC,0x0600,
  476. 0x73FC,0x0C00,
  477. 0x73FC,0x0C00,
  478. 0x7804,0x07F8,
  479. 0x3FF8,0x0000,
  480. 0x3FF8,0x0200,
  481. 0x1FF0,0x0200,
  482. 0x1FF0,0x0200,
  483. 0x07F0,0x07F0,
  484. 0x05D0,0x05D0,
  485. 0x05D0,0x05D0,
  486.  
  487. 0x0000,0x000
  488. };
  489.  
  490.  
  491. USHORT Dodo4Data[] =
  492. {
  493. 0x0000,0x0000,
  494.  
  495. 0x07FC,0x0000,
  496. 0x18E2,0x07FC,
  497. 0x18E2,0x07FC,
  498. 0x1FFE,0x01F0,
  499. 0x0FFC,0x03F8,
  500. 0x07F8,0x01F0,
  501. 0x0FF0,0x00E0,
  502. 0x3FF8,0x0040,
  503. 0x3FF8,0x0000,
  504. 0x7F3C,0x00C0,
  505. 0x7F3C,0x00C0,
  506. 0x7F7C,0x0080,
  507. 0x7EFC,0x0100,
  508. 0x7E04,0x01F8,
  509. 0x3FF8,0x0000,
  510. 0x3FF8,0x0000,
  511. 0x1FF0,0x0810,
  512. 0x3FF8,0x3008,
  513. 0x500A,0x500A,
  514. 0xA815,0xA815,
  515. 0x2414,0x2414,
  516.  
  517. 0x0000,0x0000
  518.  
  519. };
  520.  
  521. /* four pointers - each pointer has four images */
  522. UWORD *BirdData[]={Bird1Data,Bird2Data,Bird3Data,Bird4Data};
  523. UWORD *FaceData[]={Face1Data,Face2Data,Face3Data,Face4Data};
  524. UWORD *FishData[]={Fish1Data,Fish2Data,Fish3Data,Fish2Data};
  525. UWORD *DodoData[]={Dodo1Data,Dodo2Data,Dodo3Data,Dodo4Data};
  526.  
  527. UWORD **Data[]={BirdData,FaceData,FishData,DodoData};
  528.  
  529. /*******************************************************************/
  530. /* struct for all four windows.  individual titles and pointerimage */
  531. /*     filled in below.                       */
  532. /*******************************************************************/
  533. struct NewWindow nw = {
  534.            0, 0,                 /* start position               */
  535.            172, 40,               /* width, height                */
  536.            -1, -1,                 /* detail pen, block pen        */
  537.            CLOSEWINDOW|MOUSEMOVE|ACTIVEWINDOW|INACTIVEWINDOW,
  538.                                     /* IDCMP flags                  */
  539.            WINDOWDEPTH|WINDOWCLOSE|REPORTMOUSE|ACTIVATE|WINDOWDRAG,    
  540.                                    /* window flags                 */
  541.            NULL,                   /* pointer to first user gadget */
  542.            NULL,                   /* pointer to user checkmark    */ 
  543.            NULL,          /* window titles filled in below         */ 
  544.            NULL,                   /* pointer to screen            */
  545.             NULL,                   /* pointer to superbitmap       */
  546.            0,0,0,0,          /* UNsized window */
  547.            WBENCHSCREEN            /* type of screen in which to open */   
  548.   };
  549.  
  550.  
  551. main()
  552. {
  553.  
  554.     if ((IntuitionBase = (struct IntuitionBase *)
  555.         OpenLibrary("intuition.library", 0)) == 0){
  556.     printf("Couldn't open intuition.library!");
  557.     mycleanup();
  558.     }
  559.  
  560. /*******************************************************************/
  561. /* fill in each window position and title, and open it.        */
  562. /*******************************************************************/
  563.  
  564.     for (win=0;win<NUMWINS;++win){        
  565.         switch(win){
  566.         case(0):
  567.             nw.LeftEdge=40;
  568.             nw.TopEdge=40;
  569.             nw.Title="BirdPointer";
  570.             break;
  571.         case(1):
  572.             nw.LeftEdge=nw.LeftEdge+nw.Width+10;
  573.             nw.Title="FacePointer";
  574.             break;
  575.  
  576.         case(2):
  577.             nw.LeftEdge=40;
  578.             nw.TopEdge=nw.TopEdge+50;
  579.             nw.Title="FishPointer";
  580.             break;
  581.         case(3):
  582.             nw.LeftEdge=nw.LeftEdge+nw.Width+10;
  583.             nw.Title="DodoPointer";
  584.             break;
  585.         default:
  586.             break;
  587.         }
  588.     
  589.         if ((MyWindow[win] = (struct Window *)OpenWindow(&nw))==0){
  590.         printf("Couldn't open a window.");
  591.         mycleanup();
  592.         }
  593.     }    
  594.  
  595. /* start with Dodo window active */
  596.     
  597.     win=3;
  598.     SetPointer(MyWindow[win],Data[win][i],21,16,0,-7);
  599.  
  600. /*******************************************************************/
  601. /* forever deal with mouse activities */
  602. /*******************************************************************/
  603.     for(;;){
  604.         Wait(1<<MyWindow[win]->UserPort->mp_SigBit);
  605.         while (message=GetMsg(MyWindow[win]->UserPort)){        
  606.             switch(message->Class){
  607.             case(CLOSEWINDOW):
  608.                 ReplyMsg(message);
  609.                 mycleanup();
  610.                 break;
  611.             case(MOUSEMOVE):
  612.                 mm=1;
  613.                 ReplyMsg(message);
  614.                 break;
  615.             case(INACTIVEWINDOW):   /* mouse clicked elsewhere! */
  616.                 ReplyMsg(message);
  617.                 findwindow();
  618.                 break;
  619.             default:
  620.                 ReplyMsg(message);
  621.                 break;
  622.             }
  623.         }
  624. /*******************************************************************/
  625. /* no more messages - if mouse moved, change the pointer image! */
  626. /*******************************************************************/
  627.         if(mm==1){
  628.             i=(i+1)%4;
  629.             SetPointer(MyWindow[win],Data[win][i],21,16,0,-7);
  630.             mm=0;
  631.         }    
  632.     } /*for(;;)*/
  633. } /*main*/
  634.  
  635. /*******************************************************************/
  636. /* Wait until mouse is clicked on one of our windows. */
  637. /*******************************************************************/
  638. void findwindow(){
  639.     for(;;){
  640.     Signals=Wait((1 << MyWindow[0]->UserPort->mp_SigBit)|
  641.     (1 << MyWindow[1]->UserPort->mp_SigBit)|
  642.     (1 << MyWindow[2]->UserPort->mp_SigBit)|
  643.     (1 << MyWindow[3]->UserPort->mp_SigBit));
  644.  
  645.      for(win=0;win<NUMWINS;++win){
  646.      while((Signals)&(1 << MyWindow[win]->UserPort->mp_SigBit)){
  647.        if(((message=GetMsg(MyWindow[win]->UserPort))->Class)==ACTIVEWINDOW){
  648.             ReplyMsg(message);
  649.             return;
  650.        }
  651.        else ReplyMsg(message);    
  652.      }
  653.        }
  654.     }/*for(;;)*/
  655. }/*findwindow()*/        
  656.  
  657. /*******************************************************************/
  658. /* Clean up loose ends (most done by intuition?) */
  659. /*******************************************************************/
  660. mycleanup(){
  661. for(win=0;win<NUMWINS;win++){ 
  662.     while(message=GetMsg(MyWindow[win]->UserPort))ReplyMsg(message);
  663.     ClearPointer(MyWindow[win]);
  664.     if (MyWindow[win]) CloseWindow(MyWindow[win]);
  665. }
  666. if (IntuitionBase) CloseLibrary (IntuitionBase);
  667. exit();
  668. }
  669.  
  670.  
  671.